/*
 * face_detection.cpp
 *
 *  Created on: Oct 16, 2013
 *      Author: szendeja
 */

#include "opencv2/core/core.hpp"			//cv::Mat
#include "opencv2/imgproc/imgproc.hpp"		//cv::Canny
#include "opencv2/objdetect/objdetect.hpp"	//CascadeClassifier
#include "opencv2/highgui/highgui.hpp"		//cv::imread()

#include "iostream"							//std::cout

using namespace cv;
using namespace std;
CascadeClassifier face_cascade;

int face_detect() {
vector<Rect> faces; // Vector para las caras detectadas

	// Carga el archivo xml para detectar caras:
    if (!face_cascade.load("C:\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt.xml")){
    cout << "Cannot load face xml!" << endl;
    return -1;
    }

Mat src = imread("image.jpg"); // Almacena en la matriz scr la imagen

    if (src.empty()){
    cout << "Cannot load image!" << endl;
    return -1;
    }

// Pasamos a escala de grises la imagen
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);
equalizeHist(gray, gray);
imshow("Gray", gray);

face_cascade.detectMultiScale(gray, faces, 1.2, 3); // Detectamos las caras presentes en la imagen

	// Caras
    for (int i = 0; i < int(faces.size()); i++){ // Repetimos tantas veces como caras detectadas:
    Rect r = faces[i];
    rectangle(src, Point(r.x, r.y), Point(r.x + r.width, r.y + r.height), CV_RGB(0,255,0)); // Marcamos la cara
    }

imshow("Detection", src); // Mostramos la imagen con las caras marcadas
waitKey(0);

return 0;
}

int main(){
	int status;
	status = face_detect();
	return 0;
}
